Increase max cmdline to 1024 characters.
Signed-off-by: Keir Fraser <keir@xensource.com>
/* Raw start-of-day parameters from the hypervisor. */
union xen_start_info_union xen_start_info_union;
-#define COMMAND_LINE_SIZE 256
+#define COMMAND_LINE_SIZE MAX_GUEST_CMDLINE
static char command_line[COMMAND_LINE_SIZE];
char saved_command_line[COMMAND_LINE_SIZE];
static void __init parse_cmdline_early (char ** cmdline_p)
{
char c = ' ', *to = command_line, *from = saved_command_line;
- int len = 0;
+ int len = 0, max_cmdline;
int userdef = 0;
- memcpy(saved_command_line, xen_start_info.cmd_line, MAX_CMDLINE);
+ if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
+ max_cmdline = COMMAND_LINE_SIZE;
+ memcpy(saved_command_line, xen_start_info.cmd_line, max_cmdline);
/* Save unparsed command line copy for /proc/cmdline */
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ saved_command_line[max_cmdline-1] = '\0';
for (;;) {
if (c != ' ')
static __init void parse_cmdline_early (char ** cmdline_p)
{
char c = ' ', *to = command_line, *from = COMMAND_LINE;
- int len = 0;
+ int len = 0, max_cmdline;
- memcpy(saved_command_line, xen_start_info.cmd_line, MAX_CMDLINE);
+ if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
+ max_cmdline = COMMAND_LINE_SIZE;
+ memcpy(saved_command_line, xen_start_info.cmd_line, max_cmdline);
/* Save unparsed command line copy for /proc/cmdline */
- memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ saved_command_line[max_cmdline-1] = '\0';
for (;;) {
if (c != ' ')
start_info->mod_start = vinitrd_start;
start_info->mod_len = initrd_len;
}
- strncpy((char *)start_info->cmd_line, cmdline, MAX_CMDLINE);
- start_info->cmd_line[MAX_CMDLINE-1] = '\0';
+ strncpy((char *)start_info->cmd_line, cmdline, MAX_GUEST_CMDLINE);
+ start_info->cmd_line[MAX_GUEST_CMDLINE-1] = '\0';
munmap(start_info, PAGE_SIZE);
/* shared_info page starts its life empty. */
start_info->flags = 0;
DPRINTF((" control event channel is %d\n", control_evtchn));
start_info->domain_controller_evtchn = control_evtchn;
- strncpy((char *)start_info->cmd_line, cmdline, MAX_CMDLINE);
- start_info->cmd_line[MAX_CMDLINE - 1] = '\0';
+ strncpy((char *)start_info->cmd_line, cmdline, MAX_GUEST_CMDLINE);
+ start_info->cmd_line[MAX_GUEST_CMDLINE - 1] = '\0';
munmap(start_info, PAGE_SIZE);
DPRINTF(("done setting up start_info\n"));
unsigned long _initrd_start, unsigned long initrd_len,
char *cmdline)
{
- char *dst;
int i, rc;
unsigned long pfn, mfn;
unsigned long nr_pages;
si->mod_len, si->mod_start);
}
- dst = (char *)si->cmd_line;
+ memset(si->cmd_line, 0, sizeof(si->cmd_line));
if ( cmdline != NULL )
- {
- for ( i = 0; i < 255; i++ )
- {
- if ( cmdline[i] == '\0' )
- break;
- *dst++ = cmdline[i];
- }
- }
- *dst = '\0';
+ strncpy(si->cmd_line, cmdline, sizeof(si->cmd_line)-1);
/* Reinstate the caller's page tables. */
write_ptbase(current);
cmdline = (char *)(mod[0].string ? __va(mod[0].string) : NULL);
if ( cmdline != NULL )
{
- static char dom0_cmdline[256];
+ static char dom0_cmdline[MAX_GUEST_CMDLINE];
/* Skip past the image name. */
while ( *cmdline == ' ' ) cmdline++;
* extended by an extra 4MB to ensure this.
*/
-#define MAX_CMDLINE 256
+#define MAX_GUEST_CMDLINE 1024
typedef struct {
/* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
memory_t nr_pages; /* 0: Total pages allocated to this domain. */
_MEMORY_PADDING(F);
memory_t mod_len; /* 56: Size (bytes) of pre-loaded module. */
_MEMORY_PADDING(G);
- s8 cmd_line[MAX_CMDLINE]; /* 64 */
-} PACKED start_info_t; /* 320 bytes */
+ s8 cmd_line[MAX_GUEST_CMDLINE]; /* 64 */
+} PACKED start_info_t; /* 1088 bytes */
/* These flags are passed in the 'flags' field of start_info_t. */
#define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */